//#include "obj_loader.h"
//
//model obj_loader::load(){
//		// count faces in file
//	FILE* f = fopen( a_Obj, "r" );
//	if (!f) Log::Error( "Could not load dynamic object", a_Obj );
//	unsigned int fcount = 0, ncount = 0, uvcount = 0, vcount = 0;
//	char buffer[256];
//	char cmd[32], objname[128];
//	while (1)
//	{
//		fgets( buffer, 250, f );
//		if (feof( f )) break;
//		sscanf( buffer, "%s", cmd );
//		if (!strcmp( cmd, "v" )) vcount++;
//		else if (!strcmp( cmd, "vt" )) uvcount++;
//		else if (!strcmp( cmd, "vn" )) ncount++;
//		else if (!strcmp( cmd, "f" )) fcount++;
//	}
//	fclose( f );
//	// allocate arrays
//	unsigned int verts = 0, uvs = 0, normals = 0, currvert = 0;
//	m_Prim = new Primitive*[fcount];
//	m_OPrim = new Primitive*[fcount];
//	Primitive* prims = (Primitive*)MALLOC64( sizeof( Primitive ) * fcount * 2 );
//	m_PCount = 0;
//	vector3* vert = new vector3[vcount];
//	vector3* norm = new vector3[ncount];
//	float* tu = new float[uvcount];
//	float* tv = new float[uvcount];
//	m_VPool = new Vertex[fcount * 6];
//	// load object
//	int primidx = 0;
//	Material* curmat = 0;
//	f = fopen( a_Obj, "r" );
//	while (1)
//	{
//		fgets( buffer, 250, f );
//		if (feof( f )) break;
//		sscanf( buffer, "%s", cmd );
//		if (!strcmp( cmd, "v" ))
//		{
//			// vertex, add to list
//			float x, y, z;
//			sscanf( buffer, "%s %f %f %f", cmd, &x, &y, &z );
//			x *= a_Scale, y *= a_Scale, z *= a_Scale;
//			vector3 pos = vector3( x, y, z );
//			vert[verts++] = pos;
//		}
//		else if (!strcmp( cmd, "g" ))
//		{
//			sscanf( buffer + 2, "%s", objname );
//		}
//		else if (!strcmp( cmd, "mtllib" ))
//		{
//			char libname[128];
//			sscanf( buffer + 7, "%s", libname );
//			char fullname[256];
//			strcpy( fullname, "meshes/" );
//			strcat( fullname, libname );
//			Scene::GetMatManager()->LoadMTL( fullname );
//		}
//		else if (!strcmp( cmd, "vt" ))
//		{
//			// texture coordinate
//			float u, v;
//			sscanf( buffer, "%s %f %f", cmd, &u, &v );
//			tu[uvs] = u, tv[uvs++] = -v; // prevent negative uv's
//		}
//		else if (!strcmp( cmd, "vn" ))
//		{
//			// vertex normal
//			float x, y, z;
//			sscanf( buffer, "%s %f %f %f", cmd, &x, &y, &z );
//			norm[normals++] = vector3( x, y, z );
//		}
//		else if (!strcmp( cmd, "usemtl" ))
//		{
//			// vertex normal
//			char matname[128];
//			sscanf( buffer + 7, "%s", matname );
//			curmat = Scene::GetMatManager()->FindMaterial( matname );
//		}
//		else if (!strcmp( cmd, "f" ))
//		{
//			// face
//			Vertex* v[3];
//			float cu[3], cv[3];
//			const Texture* t = curmat->GetTexture();
//			unsigned int vnr[9];
//			unsigned int vars = sscanf( buffer + 2, "%i/%i/%i %i/%i/%i %i/%i/%i", 
//				&vnr[0], &vnr[1], &vnr[2], &vnr[3], &vnr[4], &vnr[5], &vnr[6], &vnr[7], &vnr[8] );
//			if (vars < 9) 
//			{
//				vars = sscanf( buffer + 2, "%i/%i %i/%i %i/%i", &vnr[0], &vnr[2], &vnr[3], &vnr[5], &vnr[6], &vnr[8] );
//				if (vars < 6)
//				{
//					sscanf( buffer + 2, "%i//%i %i//%i %i//%i", &vnr[0], &vnr[2], &vnr[3], &vnr[5], &vnr[6], &vnr[8] );
//				}
//			}
//			for ( unsigned int i = 0; i < 3; i++ )
//			{
//				v[i] = &m_VPool[currvert++];
//				if (t) cu[i] = tu[vnr[i * 3 + 1] - 1], cv[i] = tv[vnr[i * 3 + 1] - 1];
//				v[i]->SetNormal( norm[vnr[i * 3 + 2] - 1] );
//				v[i]->SetPos( vert[vnr[i * 3] - 1] );
//			}
//			Primitive* p = m_Prim[m_PCount] = &prims[primidx++];
//			Primitive* op = m_OPrim[m_PCount] = &prims[primidx++];
//			if (t)
//			{
//				while ((cu[0] < 0) || (cu[1] < 0) || (cu[2] < 0)) cu[0] += 8, cu[1] += 8, cu[2] += 8;
//				while ((cv[0] < 0) || (cv[1] < 0) || (cv[2] < 0)) cv[0] += 8, cv[1] += 8, cv[2] += 8;
//				v[0]->SetUV( cu[0] * t->m_Width, cv[0] * t->m_Height );
//				v[1]->SetUV( cu[1] * t->m_Width, cv[1] * t->m_Height );
//				v[2]->SetUV( cu[2] * t->m_Width, cv[2] * t->m_Height );
//			}
//			p->Init( v[0], v[1], v[2] );
//			Vertex* ov0 = &m_VPool[currvert++]; *ov0 = *p->GetVertex( 0 );
//			Vertex* ov1 = &m_VPool[currvert++]; *ov1 = *p->GetVertex( 1 );
//			Vertex* ov2 = &m_VPool[currvert++]; *ov2 = *p->GetVertex( 2 );
//			op->Init( ov0, ov1, ov2 );
//			p->SetMaterial( curmat );
//			m_PCount++;
//		}
//	}
//	fclose( f );
//	delete vert;
//	delete norm;
//	delete tu;
//	delete tv;
